#ifdef _MSC_VER
#ifdef _WIN64
#include <WinSock2.h>
#elif _WIN32
#include <winsock.h>
#endif

#endif
#include <iostream>
#include <thread>

#ifdef ORMPP_ENABLE_MYSQL
#include "mysql.hpp"
#endif

#ifdef ORMPP_ENABLE_SQLITE3
#include "sqlite.hpp"
#endif

#ifdef ORMPP_ENABLE_PG
#include "postgresql.hpp"
#endif

#include "dbng.hpp"
#include "connection_pool.hpp"
#include "ormpp_cfg.hpp"


using namespace std::string_literals;
using namespace ormpp;

struct person2
{
    int id;
    std::string age;
};
REFLECTION(person2, id, age)

int main()
{
    person2 p = {7, "test1"};
    person2 p1 = {8, "test2"};
    person2 p2 = {9, "test3"};
    std::vector<person2> v{p1, p2};

    dbng<mysql> mysql;
    mysql.connect("127.0.0.1", "root", "root", "test");
//    mysql.create_datatable<person2>();
//
//    mysql.insert(p);
//    mysql.insert(v);
//
//    mysql.update(p);
//    mysql.update(v);

    auto result = mysql.query<person2>(); //vector<person>
    for(auto& person : result){
        std::cout<<person.id<<" "<<person.age<<std::endl;
    }
//
//    mysql.delete_records<person2>();
//
//    //transaction
//    mysql.begin();
//    for (int i = 0; i < 10; ++i) {
//        person2 s = {i, "tom"};
//        if(!mysql.insert(s)){
//            mysql.rollback();
//            return -1;
//        }
//    }
//    mysql.commit();
}